/** AUTOCOMPLETE  FORM V1.1
 * added mode autocomplete for uxFCombo
 *
 *  **/

function fnCompleteForm(form, oData) {
    if ((typeof form != "object") || (typeof oData != "object")) {
        return;
    }
   
    for (datacol in oData) {

        if (oData[datacol] === null) {
            continue;
        }
        
        if (form.getForm().findField(datacol)) {
            
            var oFormComponent = form.getForm().findField(datacol);
           
            if (oFormComponent.xtype) {
                switch (oFormComponent.xtype) {
                    /* case 'textfield' : oFormComponent.setValue(oData[datacol]); break;
                     case 'datefield' : oFormComponent.setValue(oData[datacol]); break; */
                    case 'combo' : {
                        var myArray = [];
                        myArray.Id = oData[datacol];
                        myArray.Name = oData[datacol + "_val"];   ////!!!!!!!!!!!!!
                        var rec = new Ext.data.Record(myArray);
                        oFormComponent.store.add(rec);
                        oFormComponent.setValue(oData[datacol]);
                        break;
                    }
                case 'uxFCombo': 
                    {
                        var myArray = [];
                        myArray.Id = oData[datacol];
                        myArray.Name = oData[datacol + "_val"];   ////!!!!!!!!!!!!!
                        var rec = new Ext.data.Record(myArray);
                        if (oFormComponent.mode == "remote") {                            
                            oFormComponent.store.add(rec);
                        }
                        oFormComponent.setValue(oData[datacol]);
                        break;
                    }

                    default :  oFormComponent.setValue(oData[datacol]); break;
                }
            }
        }
    }
    return;
}



//popup mesage , folosit pentru a afisa mesaje de pe server in browser ca urmare a unor operatii
//functie preluata din exemplele Extjs
Ext.example = function() {
    var msgCt;

    function createBox(t, s) {
        return ['<div class="msg">',
            '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
            '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3>', t, '</h3>', s, '</div></div></div>',
            '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
            '</div>'].join('');
    }

    return {
        msg : function(title, format) {
            if (!msgCt) {
                msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
            }
            msgCt.alignTo(document, 't-t');
            var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1));
            var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true);
            m.slideIn('t').pause(1).ghost("t", {remove:true});
        },

        init : function() {

            var lb = Ext.get('lib-bar');
            if (lb) {
                lb.show();
            }
        }
    };
}();

Ext.onReady(Ext.example.init, Ext.example);


//un buffer view general
//acest buffer view este folosit in parametrul "view" al unui grid
//acest buffer are rolul de a mentine pozitia scroll-ului in cazul paginarii
Ext.namespace("Ext.ux");

Ext.ux.Buffer = function() {

    var gvPrime = new Ext.ux.grid.BufferView({
        scrollDelay: false
    });
    gvPrime = Ext.apply(gvPrime, {
        //keeps scroll position on store reload
        forceFit: true,
        onLoad: Ext.emptyFn,
        listeners: {
            beforerefresh: function(v) {
                v.scrollTop = v.scroller.dom.scrollTop;
                v.scrollHeight = v.scroller.dom.scrollHeight;
            },
            refresh: function(v) {
                //v.scroller.dom.scrollTop = v.scrollTop;
                v.scroller.dom.scrollTop = v.scrollTop + (v.scrollTop == 0 ? 0 : v.scroller.dom.scrollHeight - v.scrollHeight);
            }
        }
    }); //end gridView
    return gvPrime;
}

//functie folosita pentru afisarea unei valori in cadrul unui grid sau mai bine zis in cadrul coloanei unui grid;
//pentru fiecare id din coloana gridului unde este folosita functia se va afisa valoarea asociata fiecarui id
//functia primeste un obiect combo

Ext.ux.comboBoxRenderer = function(combo) {
    return function(value) {
        var store = combo.getStore();
        var finalValue = null;
        Ext.each(store.data.items, function(item) {
            if (item.data.optionValue === value) {
                finalValue = item.data.optionDisplay;
            }
        });
        return finalValue;
    }
}

//cod care are ca rol salvarea intr-un cookie state-ul unor obiecte cum ar fi gridul
//un utilizator poate ascunde o coloana sau o poate redimensiona. In acest caz rezultatul (coloana)va fi salvata si la fiecare refresh al aplicatiei starea coloanei va ramane asa cum a fost setata de user
//codul este luat de pe forum

var cp = new Ext.state.CookieProvider({
    expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 365))  //30 days
});
Ext.state.Manager.setProvider(cp);

/**
 * functie care cauta o vaoare intr-un array
 */

function inArray(needle, haystack) {
    var length = haystack.length;
    for (var i = 0; i < length; i++) {
        if (haystack[i] == needle) {
            return true;
        }
    }
    return false;
}
